﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL_MechSysWeb;
using DTO_MechSysWeb;

namespace WEB_MechSysWeb.Paginas_Logado
{
    public partial class ClienteMensagens : System.Web.UI.Page
    {
        BLLMensagem bllMensagem = new BLLMensagem();
        DTOMensagem dtoMensagem = new DTOMensagem();
        BLLCliente bllCliente = new BLLCliente();

        MembershipUser memberShipUser;
        static string userID;
        static int clienteID, mensagemID;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                memberShipUser = Membership.GetUser(User.Identity.Name);
                if (memberShipUser != null)
                {
                    if (Roles.IsUserInRole("Administrador"))
                    {
                        Response.Redirect("~/Paginas_Administrador/PaginaPrincipalAdm.aspx");
                    }
                    if (Roles.IsUserInRole("Cliente"))
                    {
                        userID = memberShipUser.ProviderUserKey.ToString();
                        clienteID = bllCliente.BuscarClienteIDPorUserID(userID);
                    }
                }
                else
                {
                    Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
                }
            }
            catch (Exception)
            {
                Response.Redirect("~/Paginas_Publico/PagLogin.aspx");
            }

            if (!IsPostBack)
            {
                Habilitar(false);                
            }

            PreecherDados();
        }

        public void PreecherDados()
        {
            try
            {
                if (chkLidas.Checked == true && chkNaoLidas.Checked == true)
                {
                    ListarDados("");
                }
                else
                    if (chkLidas.Checked == false && chkNaoLidas.Checked == false)
                    {
                        gridMensagens.DataSource = null;
                        gridMensagens.DataBind();
                    }
                    else
                    {
                        string status = "False";
                        if (chkLidas.Checked == true)
                        {
                            status = "True";
                            ListarDados("", status);
                        }
                        if (chkNaoLidas.Checked == true)
                        {
                            status = "False";
                            ListarDados("", status);
                        }
                    }


            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar dados!");
            }
        }

        public void PreecherDados(string descricao)
        {
            try
            {
                ListarDadosPesquisa("", descricao);

            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar dados!");
            }
        }

        protected void ListarDados(string tipo)
        {
            int tamanhoPagina = 10;
            int registroInicio = 0;

            if (ViewState["registroInicio"] != null)
                registroInicio = (int)ViewState["registroInicio"];

            if (tipo == "proximo")
                registroInicio += tamanhoPagina;
            else if (tipo == "anterior")
                registroInicio -= tamanhoPagina;

            if (registroInicio < 0)
                registroInicio = 0;

            List<DTOMensagem> lstMensagens = bllMensagem.BuscarMensagensPorClienteID(registroInicio, tamanhoPagina, tipo, clienteID);
            gridMensagens.DataSource = PopulaGridMensagens(lstMensagens);
            gridMensagens.DataBind();

            ViewState.Add("registroInicio", registroInicio);
        }

        protected void ListarDados(string tipo, string status)
        {
            int tamanhoPagina = 10;
            int registroInicio = 0;

            if (ViewState["registroInicio"] != null)
                registroInicio = (int)ViewState["registroInicio"];

            if (tipo == "proximo")
                registroInicio += tamanhoPagina;
            else if (tipo == "anterior")
                registroInicio -= tamanhoPagina;

            if (registroInicio < 0)
                registroInicio = 0;

            List<DTOMensagem> lstMensagens = bllMensagem.BuscarMensagensPorClienteIDeStatus(registroInicio, tamanhoPagina, tipo, clienteID, status);
            gridMensagens.DataSource = PopulaGridMensagens(lstMensagens);
            gridMensagens.DataBind();

            ViewState.Add("registroInicio", registroInicio);
        }

        protected void ListarDadosPesquisa(string tipo, string descricao)
        {
            int tamanhoPagina = 10;
            int registroInicio = 0;

            if (ViewState["registroInicio"] != null)
                registroInicio = (int)ViewState["registroInicio"];

            if (tipo == "proximo")
                registroInicio += tamanhoPagina;
            else if (tipo == "anterior")
                registroInicio -= tamanhoPagina;

            if (registroInicio < 0)
                registroInicio = 0;

            List<DTOMensagem> lstMensagens = bllMensagem.BuscarMensagensPorClienteIDePesquisa(registroInicio, tamanhoPagina, tipo, clienteID, descricao);
            gridMensagens.DataSource = PopulaGridMensagens(lstMensagens);
            gridMensagens.DataBind();

            ViewState.Add("registroInicio", registroInicio);
        }

        public DataTable PopulaGridMensagens(List<DTOMensagem> lstMensagens)
        {
            DataTable dataTableGridView = new DataTable();
            DataRow dataRow;

            try
            {
                if (lstMensagens.Count > 0)
                {
                    dataTableGridView.Columns.Add("MensagemID", typeof(string));
                    dataTableGridView.Columns.Add("Titulo", typeof(string));
                    dataTableGridView.Columns.Add("Assunto", typeof(string));
                    dataTableGridView.Columns.Add("Remetente", typeof(string));
                    dataTableGridView.Columns.Add("Status", typeof(bool));


                    foreach (DTOMensagem dtoMensagem in lstMensagens)
                    {
                        dataRow = dataTableGridView.NewRow();


                        dataRow["MensagemID"] = dtoMensagem.MensagemID.ToString();
                        dataRow["Titulo"] = dtoMensagem.Titulo.ToString();
                        dataRow["Assunto"] = dtoMensagem.Assunto;
                        dataRow["Remetente"] = dtoMensagem.Remetente;
                        dataRow["Status"] = dtoMensagem.Status;

                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

            }
            catch (Exception)
            {
                Mensagem.ExibirEmUP("Não foi possível carregar os dados para o grid!");
            }

            return dataTableGridView;
        }

        protected void imgbtnPesquisar_Click(object sender, ImageClickEventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisa.Text))
            {
                try
                {
                    PreecherDados(txtPesquisa.Text);
                }
                catch (Exception)
                {
                    Mensagem.ExibirEmUP("Informe uma descrição para pesquisar!");
                }

            }
        }

        public void Habilitar(bool status)
        {
            btnCancelar.Enabled = status;
            btnExcluir.Enabled = status;

            if (status == true)
            {
                btnCancelar.ForeColor = System.Drawing.Color.White;
                btnExcluir.ForeColor = System.Drawing.Color.White;
            }
            if (status == false)
            {
                btnCancelar.ForeColor = System.Drawing.Color.Black;
                btnExcluir.ForeColor = System.Drawing.Color.Black;
            }

        }

        public void LimparCampos()
        {
            clienteID = 0;
            mensagemID = 0;
            userID = "";
            txtTitulo.Text = string.Empty;
            txtAssunto.Text = string.Empty;
            txtTexto.Text = string.Empty;
            txtRemetente.Text = string.Empty;
        }

        protected void gridMensagens_SelectedIndexChanged(object sender, EventArgs e)
        {
            mensagemID = Convert.ToInt32(gridMensagens.SelectedValue.ToString());
            dtoMensagem = bllMensagem.BuscarMensagemPorMensagemID(mensagemID);
            txtTitulo.Text = dtoMensagem.Titulo;
            txtAssunto.Text = dtoMensagem.Assunto;
            txtTexto.Text = dtoMensagem.Texto;
            txtRemetente.Text = dtoMensagem.Remetente;
            if (dtoMensagem.Status == false)
            {
                bllMensagem.AtualizarStatus(mensagemID, true);
            }

            Habilitar(true);
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Habilitar(false);
            LimparCampos();
        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(mensagemID.ToString()))
            {
                try
                {
                    bllMensagem.Excluir(mensagemID);
                    Mensagem.ExibirEmUP("Mensagem excluída com sucesso!");
                    LimparCampos();
                    Habilitar(false);
                    PreecherDados();

                }
                catch
                {
                    Mensagem.ExibirEmUP("Não foi possível excluir a Mensagem!");
                }
            }
            else
            {
                Mensagem.ExibirEmUP("Selecione uma Mensagem para excluir!");
            }
        }
    }
}